<template>
</template>
<script>

	/*
	* 组件属性
	* verify(data):验证函数
	* 	data待验证对象{
			表单name:组件对象,
			表单name:组件对象,
			表单name:组件对象,
			...
		}
	* */
	export default{
		data(){
            return {
                rules:{
                    notEmpty(v,bool){//是否为空
                        let is=bool==(/\S/).test(v)?true:false;
                        if(!is)return bool?"不能为空":"不是空值";
                        return true;
					},
					int(v,bool){//是否为整数
                        let is=bool==(/^[-+]?\d*$/).test(v)?true:false;
                        if(!is)return bool?"不是整数":"不能是整数";
                        return true;
					},
					float(v,bool){//是否为浮点数
                        let is=bool==(/^\d+\.\d\d$/).test(v)?true:false;
                        if(!is)return bool?"不是浮点数":"不能是浮点数";
                        return true;
                    },
					min(v,min){//最小值
						v=parseFloat(v);
						return v>=min?true:"数值小于"+min;
					},
					max(v,max){//最小值
                        v=parseFloat(v);
                        return v<=max?true:'数值大于'+max;
                    },
					card(v,bool){//身份证
                        let is=bool==(/^\d+\.\d\d$/).test(v)?true:false;
                        if(!is)return bool?"身份证格式不正确":"是身份证号码";
                        return true;
					},
					mobile(v,bool){//手机号
                        let is=bool==(/^0?(13|14|15|16|17|18|19)[0-9]{9}$/).test(v)?true:false;
                        if(!is)return bool?"手机号格式不正确":"是手机号码";
                        return true;
					},
					tel(v,bool) {//手机或电话
                        let is=bool==(/^(0?(13|14|15|16|17|18|19)[0-9]{9})$|^([0-9-()（）]{7,18})$/).test(v)?true:false;
                        if(!is)return bool?"手机或电话号码格式不正确":"手机或电话号码";
                        return true;
                    },
					email(v,bool){//邮箱
                        let is=bool==(/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/).test(v)?true:false;
                        if(!is)return bool?"邮箱格式不正确":"是电子邮箱";
                        return true;
					},
					url(v,bool){//网址
                        let is=bool==(/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i).test(v)?true:false;
                        if(!is)return bool?"url格式不正确":"是网址";
                        return true;
                    },
					date(v,bool){//日期yyyy-mm-dd
                        let is=bool==(/^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/).test(v)?true:false;
                        if(!is)return bool?"日期格式不正确":"日期";
                        return true;
					},
					cn(v,bool){//中文字符串
                        let is=bool==(/[\u4e00-\u9fa5]/).test(v)?true:false;
                        if(!is)return bool?"不是中文字符串":"是中文字符串";
                        return true;
					},
					en(v,bool){//英字符串
                        let is=bool==(/^[a-z]+$/i).test(v)?true:false;
                        if(!is)return bool?"不是英文字符串":"是英文字符串";
                        return true;
                    },
                    numberEn_(v,bool){//由数字、英文和下划线组成
                        let is=bool==(/^\w+$/).test(v)?true:false;
                        if(!is)return bool?"不是数字、英文和下划线组成":"是数字、英文和下划线组成";
                        return true;
					},
					numberEn(v,bool){//由数字和英文组成
                        let is=bool==(/^[a-z0-9]+$/i).test(v)?true:false;
                        if(!is)return bool?"不是数字和英文组成":"是数字和英文组成";
                        return true;
                    },
					minlength(v,len){
						let tmpLen=(v+"").length;
                        return tmpLen>=len?true:"字符串长度过短";
					},
                    maxlength(v,len){
                        let tmpLen=(v+"").length;
                        return tmpLen<=len?true:"字符串长度过长";
                    },
					custom(v,callback,componentObj){//自定义验证
						if(callback){
                            return callback(v,componentObj);//通过返回true,未通过返回错误提示
						}
					}
				},
			}
		},
        methods:{
			verify(data){

			    /*
					验证通过返回true，
					否则返回验证结果：{
						pass:{
							表单name:组件对象,//其中组件对象定义了resText属性存放验证信息
							表单name:组件对象,
							...
						},
						notPass{},
					}
			    */

			    let res={pass:{},notPass:{}};
			    let isPass=true;
				if(objLen(data)!=0){
				    //遍历验证对象
					for(let i in data){
                        data[i].resText="";
					    if(data[i].rules=={}){
					        res.pass[i]=data[i];
						}else{
					        let rule=data[i].rules;
					        //遍历指定验证
					        for(let k in rule){
                                let tmpres;
					            if(k=="custom"){
                                    tmpres=this.rules[k](data[i].value,rule[k][0],data[i]);
								}else{
                                    tmpres=this.rules[k](data[i].value,rule[k][0]);
                                }
								if(tmpres==true){
                                    res.pass[i]=data[i];
                                    res.pass[i].resText='验证通过';
								}else{
                                    isPass=false;
                                    res.notPass[i]=data[i];
                                    res.notPass[i].resText=rule[k][1]?rule[k][1]:tmpres;//未定义验证提示信息，则使用默认设置
                                    break;
								}
							}
						}
					}

					if(!isPass)return res;
					return true;
				}
				return true;
			}
        }
	}
</script>
